import numpy as np  # 引入numpy库  np简化别名

if __name__ == "__main__":

    A = np.matrix([[1,2] , [3,4]])
    print(A)
    ## 矩阵属性
    print(A.shape)
    print(A.T)
    ## 获取矩阵的元素
    print(A[1,1])
    print(A[0])
    print(A[:,0])

    ## 矩阵基本运算
    print("矩阵基本运算")
    B = np.array([[5,6] , [7,8]])
    print(A + B )
    print(A - B )
    print(10 * A )
    print(A * 10)
    print(A * B )
    print(A.dot(B))

    p = np.array([10 , 100])
    print(A + p)
    print(A + 1)
    print(A.dot(p))


    ## 单位矩阵
    I = np.identity(2)
    print(I)
    print(A.dot(I))
    print(I.dot(A))

    # 逆矩阵 -    np.linalg -> linear algebra 子模块下 调用方法
    invA = np.linalg.inv(A)
    print(invA)
    # A的逆矩阵乘A = I 单位矩阵  (计算机存在误差 结果 可能不是0  1.11022302e-16)
    # 类设计  - 当判断一个浮点数是否为零的时候， _global中设置了 EPSILONE 精度至  ， 如果小于这个精度就说是等于零
    print(invA.dot(A))
    print(A.dot(invA))

    ## 试验  - 只有方阵 才存在逆矩阵
    try :
        C = np.array([[1, 2, 3], [4, 5, 6]])
        np.linalg.inv(C)
    except Exception as ex:
        print(f"--- Caught an exception! ---")
        print(f"Error Type: {type(ex).__name__}")
        print(f"Error Message: {str(ex)}")  # 最推荐的获取消息的方式
